iT邦幫忙

3

[Shell Script] Day08-for 迴圈的第二種形式

  • 分享至 

  • xImage
  •  

清單式的寫法好處就在,如果我們要for迴圈處理的資料是檔案,或者像清單列表一樣,我們就可以使用這個方式。缺點就是,需要INDEX或者要步進值的時候,可能就要自己而外處理,就像昨天的範例 NO 一樣。
Bash Script 除了昨天介紹的 for 變數 in 清單 這寫法外,也有像程式語言一樣的寫法。

清單式的寫法好處就在,如果我們要for迴圈處理的資料是檔案,或者像清單列表一樣,我們就可以使用這個方式。缺點就是,需要INDEX或者要步進值的時候,可能就要自己而外處理,就像昨天的範例 NO 一樣。

OK!來複習一下 for 迴圈的第二種寫法:

for (( expr1; expr2; expr3 ))
do
	command1
	command2
	…
done

expr1 ~ expr3 昨天介紹過了,現在直接來看範例:

#!/bin/bash

for (( i=0; i<5; i++ ))
do
    echo "這次第 $i 個迴圈..."
done

看出了嗎?
expr1 初始化:我給予一個變數i的值為0
expr2 終止條件:當 i<5 不成立時,迴圈就會無止境的執行下去
expr3 步進值:每當執行一次迴圈,就會執行一次 i++

當然,expr3 不一定要寫成 i++,你也可以寫 ++i 或者 **i=$((i+1))**都行。反正不管寫什麼,只要記住,每執行一次迴圈,這裡就會被執行一次。

所以結果也是顯而易見的:

最後,公布一下昨天的答案囉!!
昨天的題目是, 將目錄底下所有 test 開頭的檔案全部改成 example 開頭

答案其實真的很簡單,只要會改一個檔案,就可以讓電腦幫我們改全部。
因為考慮到可能有能對 linux 不熟習,請允許我用最簡單的方式來介紹(其實是想充版面吧XD

首先:我在該目錄底下有以下這些檔案:

所以我如果手動改可能要下以下這些指令 (mv 原檔案名稱 新檔案名稱),才能完成我的需求。

mv test1.sh exampletest1.sh
mv test2.sh exampletest2.sh
mv testDay04-1.sh exampletestDay04-1.sh
mv testDay05-1.sh exampletestDay05-1.sh
mv testDay06-1.sh exampletestDay06-1.sh

方法一:把以上這些命令放到一個 .sh 的檔案中,然後執行它。
可是,如果檔案有一百個,兩百個不是打到天黑地暗 XD

所以,我們一定要用昨天介紹的 for 迴圈來完成,這樣一來檔案越多,就省了越多功夫和打字的時間。

for MY_FILE in test*
do
	mv $MY_FILE example$MY_FILE
done

小技巧:因為這牽扯到修改檔案,所以會建議先以 echo 取代 mv,先觀察一下有沒有錯,再執行!免得一失足成千古恨,『我回不去了』

所以我還是先執行這個範例 example7_3.sh

!#/bin/bash

for MY_FILE in test*
do
echo "mv $MY_FILE example$MY_FILE"
done

結果:

當然,這只是個小小小小的範例,所以會覺得五行程式碼變四行,好像還好!可是如果是兩三百個檔案呢?那就是兩三百行變四行阿,以投資報酬率來算,真的是很划算。O(n)

鐵人賽文章分享
上一篇 for 迴圈的第一種形式
下一篇 for 迴圈的第三種形式


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言